package com.peas.platform.module.icims.expenditure.expenses.adapter.repository.po;

import java.util.*;
import java.math.*;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.peas.platform.common.core.annotation.Comment;
import com.peas.platform.framework.mybatisplus.po.BasePo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.apache.ibatis.type.JdbcType;
import javax.validation.constraints.*;

// 报账单明细附件
@Data
@EqualsAndHashCode(callSuper = false)
@TableName(value = "`tbl_expenditure_reimbursement_item_file`")
public class ExpenditureReimbursementItemFilePo extends BasePo {

    // 报账单ID
    // （报账单表）外键
    @Comment(value = "报账单ID")
    @TableField(value = "`expenditure_reimbursement_id`", jdbcType = JdbcType.BIGINT)
    private Long expenditureReimbursementId;

    // 报账单明细费用类型
    // 枚举取值:ExpenditureReimbursementFeetype
    @Comment(value = "报账单明细费用类型")
    @NotBlank(message = "报账单明细费用类型不能为空")
    @Size(max = 20, message = "报账单明细费用类型不能超过20个字符")
    @TableField(value = "`expenditure_reimbursement_feetype`", jdbcType = JdbcType.VARCHAR)
    private String expenditureReimbursementFeetype;

    // 报账单明细ID
    // 根据报账单明细费用费类型不同，关联相应的明细表ID
    @Comment(value = "报账单明细ID")
    @TableField(value = "`expenditure_reimbursement_item_id`", jdbcType = JdbcType.BIGINT)
    private Long expenditureReimbursementItemId;

    // 报账费用类型附件ID
    // （报账费用类型附件）外键
    @Comment(value = "报账费用类型附件ID")
    @NotNull(message = "报账费用类型附件ID不能为空")
    @TableField(value = "`expenditure_feetype_file_id`", jdbcType = JdbcType.BIGINT)
    private Long expenditureFeetypeFileId;

    // 附件ID
    // （附件表）外键
    @Comment(value = "附件ID")
    @TableField(value = "`attachment_id`", jdbcType = JdbcType.BIGINT)
    private Long attachmentId;

    // 附件名称
    @Comment(value = "附件名称")
    @Size(max = 200, message = "附件名称不能超过200个字符")
    @TableField(value = "`attachment_name`", jdbcType = JdbcType.VARCHAR)
    private String attachmentName;

    // 附件URL
    @Comment(value = "附件URL")
    @Size(max = 500, message = "附件URL不能超过500个字符")
    @TableField(value = "`attachment_url`", jdbcType = JdbcType.VARCHAR)
    private String attachmentUrl;

    // 附件大小
    @Comment(value = "附件大小")
    @TableField(value = "`attachment_size`", jdbcType = JdbcType.BIGINT)
    private Long attachmentSize;

    // 附件上传时间
    @Comment(value = "附件上传时间")
    @TableField(value = "`attachment_upload`", jdbcType = JdbcType.TIMESTAMP)
    private Date attachmentUpload;

    // 附件上传人
    @Comment(value = "附件上传人")
    @Size(max = 20, message = "附件上传人不能超过20个字符")
    @TableField(value = "`attachment_uploader`", jdbcType = JdbcType.VARCHAR)
    private String attachmentUploader;

    // 是否发票
    // 枚举取值:CommonYesNo
    @Comment(value = "是否发票")
    @Size(max = 20, message = "是否发票不能超过20个字符")
    @TableField(value = "`is_invoice`", jdbcType = JdbcType.VARCHAR)
    private String isInvoice;

    // 发票代码
    @Comment(value = "发票代码")
    @Size(max = 50, message = "发票代码不能超过50个字符")
    @TableField(value = "`invoice_code`", jdbcType = JdbcType.VARCHAR)
    private String invoiceCode;

    // 发票号码
    @Comment(value = "发票号码")
    @Size(max = 50, message = "发票号码不能超过50个字符")
    @TableField(value = "`invoice_number`", jdbcType = JdbcType.VARCHAR)
    private String invoiceNumber;

    // 开票日期
    @Comment(value = "开票日期")
    @Size(max = 50, message = "开票日期不能超过50个字符")
    @TableField(value = "`invoice_date`", jdbcType = JdbcType.VARCHAR)
    private String invoiceDate;

    // 校验码
    @Comment(value = "校验码")
    @Size(max = 50, message = "校验码不能超过50个字符")
    @TableField(value = "`invoice_valid`", jdbcType = JdbcType.VARCHAR)
    private String invoiceValid;

    // 机器编号
    @Comment(value = "机器编号")
    @Size(max = 50, message = "机器编号不能超过50个字符")
    @TableField(value = "`invoice_machine`", jdbcType = JdbcType.VARCHAR)
    private String invoiceMachine;

    // 金额
    @Comment(value = "金额")
    @TableField(value = "`invoice_amount`", jdbcType = JdbcType.DECIMAL)
    private BigDecimal invoiceAmount;

    // 税额
    @Comment(value = "税额")
    @TableField(value = "`invoice_rate`", jdbcType = JdbcType.DECIMAL)
    private BigDecimal invoiceRate;

    // 价税合计
    @Comment(value = "价税合计")
    @TableField(value = "`invoice_total`", jdbcType = JdbcType.DECIMAL)
    private BigDecimal invoiceTotal;

    // 价税合计(大写)
    @Comment(value = "价税合计(大写)")
    @Size(max = 100, message = "价税合计(大写)不能超过100个字符")
    @TableField(value = "`invoice_total_text`", jdbcType = JdbcType.VARCHAR)
    private String invoiceTotalText;

    // 购买方名称
    @Comment(value = "购买方名称")
    @Size(max = 200, message = "购买方名称不能超过200个字符")
    @TableField(value = "`invoice_buyer_name`", jdbcType = JdbcType.VARCHAR)
    private String invoiceBuyerName;

    // 购买方纳税人识别号
    @Comment(value = "购买方纳税人识别号")
    @Size(max = 200, message = "购买方纳税人识别号不能超过200个字符")
    @TableField(value = "`invoice_buyer_`", jdbcType = JdbcType.VARCHAR)
    private String invoiceBuyer;

    // 购买方地址电话
    @Comment(value = "购买方地址电话")
    @Size(max = 200, message = "购买方地址电话不能超过200个字符")
    @TableField(value = "`invoice_buyer_info`", jdbcType = JdbcType.VARCHAR)
    private String invoiceBuyerInfo;

    // 购买方开户行及账号
    @Comment(value = "购买方开户行及账号")
    @Size(max = 200, message = "购买方开户行及账号不能超过200个字符")
    @TableField(value = "`invoice_buyer_bank`", jdbcType = JdbcType.VARCHAR)
    private String invoiceBuyerBank;

    // 销售方名称
    @Comment(value = "销售方名称")
    @Size(max = 200, message = "销售方名称不能超过200个字符")
    @TableField(value = "`invoice_seller_name`", jdbcType = JdbcType.VARCHAR)
    private String invoiceSellerName;

    // 销售方纳税人识别号
    @Comment(value = "销售方纳税人识别号")
    @Size(max = 200, message = "销售方纳税人识别号不能超过200个字符")
    @TableField(value = "`invoice_seller_`", jdbcType = JdbcType.VARCHAR)
    private String invoiceSeller;

    // 销售方地址电话
    @Comment(value = "销售方地址电话")
    @Size(max = 200, message = "销售方地址电话不能超过200个字符")
    @TableField(value = "`invoice_seller_info`", jdbcType = JdbcType.VARCHAR)
    private String invoiceSellerInfo;

    // 销售方开户行及账号
    @Comment(value = "销售方开户行及账号")
    @Size(max = 200, message = "销售方开户行及账号不能超过200个字符")
    @TableField(value = "`invoice_seller_bank`", jdbcType = JdbcType.VARCHAR)
    private String invoiceSellerBank;

    // 收款人
    @Comment(value = "收款人")
    @Size(max = 20, message = "收款人不能超过20个字符")
    @TableField(value = "`invoice_payee`", jdbcType = JdbcType.VARCHAR)
    private String invoicePayee;

    // 复核
    @Comment(value = "复核")
    @Size(max = 20, message = "复核不能超过20个字符")
    @TableField(value = "`invoice_approver`", jdbcType = JdbcType.VARCHAR)
    private String invoiceApprover;

    // 开票人
    @Comment(value = "开票人")
    @Size(max = 20, message = "开票人不能超过20个字符")
    @TableField(value = "`invoice_printer`", jdbcType = JdbcType.VARCHAR)
    private String invoicePrinter;

}
